一個設計良好的程式,會預先設定所有可能發生的錯誤,並加以處理。這次就來說明 Windows PowerShell 所提供的錯誤類型吧。
於 Windows PowerShell 中,需要處理錯誤,比方說在嘗試切換到一個不存在的目錄或是權限不足以移除某個檔案。
Windows PowerShell 有 2 種錯誤:
中止錯誤(Terminating error):因中止執行命令,所引發的錯誤。
非中止錯誤(Non-terminating error):由非中止執行命令,所引發的錯誤。
舉例來說,假若您正從某個目錄刪除所有的 .tmp 檔案,且萬一有檔案無法被刪除時,也不要中斷刪除檔案的作業。實際的處理流程會是繼續刪除您有權限可以刪除的檔案,然後最後才回報有無法刪除的檔案。
當您無法刪除檔案所產生的錯誤,就是所謂的「非中止錯誤」。於發生非中止錯誤時,儘管錯誤已經發生,Windows PowerShell 仍然會繼續執行,最後會連同結果與錯誤一起輸出顯示。
以下面這段指令而言,就是要列出 P: 磁碟機的內容,使用 ErrorVariable 參數將錯誤的訊息指派給 Err 變數,使用 ErrorAction 參數來指定對錯誤的處理行為,採不顯示並繼續執行的方式。最後再判斷是否有錯誤產生,然後將錯誤顯示出來:
Get-ChildItem P: -ErrorVariable Err -ErrorAction SilentlyContinue
if ($Err) { Write-Host $Err -ForegroundColor Red }
若是由其他更嚴重的錯誤,造成命令中止執行,就稱為「中止錯誤」。中止錯誤會停止執行命令。比方說,您送出的資料是不符合規定的,或是您沒有權限去執行特定的命令,這時候 Windows PowerShell 就會產生中止錯誤。